﻿using System;
using System.Collections.Generic;
using System.IO;
using CopyrightLib;
using NDesk.Options;

namespace photomark
{
    /*
--mark (-m) - ставит копирайт из текущих настроек на фото
модификаторы:
[-d] применяет действие для всех фото в директории (отменяет f)
[-b] (создает бэкап для всех затронутых процессом фото)
[-s] [setting] - применяет конкретный файл настроек, если есть
[-f] [file_name] - вызывается для конкретного файла

--restore (-r) - восстанавливает оригиналы из бекапов 
модификаторы:
[-d] применяет действие для всех фото в директории (отменяет f)
[-f] [file_name] - вызывается для конкретного файла
      
--help (-h) - хелп
     */
    //-m -d -b --setting wonderful
    class Program
    {
        static void Main(string[] args)
        {
            var filenames = new List<string>();
            string settingsName = "test";
            bool allDirectory = false;
            bool needBackup = false;

            // 0 - mark, 1- restore, 2 - showhelp, 3 - показать список настроек
            int action = 0;

            var p = new OptionSet
                        {
                            {
                                "f|filename=", "список файлов фото",
                                v => filenames.Add(v)
                                },
                            {
                                "b", "делать бэкап фото перед меткой",
                                v => { needBackup = v != null; }
                                },
                            {
                                "s|setting=", "наименование используемых настроек",
                                v => { settingsName = v; }
                                },
                            {
                                "d", "пометить все файлы в директории",
                                v => { allDirectory = v != null; }
                                },
                            {
                                "h|help", "показать справку",
                                v => { if (v != null) action = 2; }
                                },
                            {
                                "m|mark", "пометить фото",
                                v => { if (v != null) action = 0; }
                                },
                            {
                                "r|restore", "восстановить фото из бэкапа",
                                v => { if (v != null) action = 1; }
                                },
                            {
                                "gs|get-settings", "показать доступные настройки",
                                v => { if (v != null) action = 3; }
                                },
                        };

            List<string> extra;
            try
            {
                extra = p.Parse(args);
            }
            catch (OptionException e)
            {
                Console.Write("ошибка в аргументах: ");
                Console.WriteLine(e.Message);
                Console.WriteLine("Используйте команду --help' для информации о программе.");
                return;
            }

            if (action == 0)
            {
                var maker = new CopyrightMaker
                                {
                                    SettingsName = settingsName,
                                    FileNames = filenames,
                                    DirectoryName = Environment.CurrentDirectory,
                                    InAllDirectory = allDirectory,
                                    NeedBackup = needBackup,
                                };
                Console.WriteLine(String.Format("Вызвана команда пометить {0} в папке {1} с настройками {2}",
                    maker.InAllDirectory ? "все фото" : "фото", maker.DirectoryName, maker.SettingsName));
                if (maker.NeedBackup)
                {
                    Console.WriteLine("Для всех фотографий создается бекап файлы с расширением " +
                                      CopyrightMaker.BackupExtension);
                }
                maker.Progress += MakerProgress;
                maker.MakeCopyright();
            }
            else if (action == 1)
            {
                var maker = new CopyrightMaker
                                {
                                    FileNames = filenames,
                                    DirectoryName = Environment.CurrentDirectory,
                                    InAllDirectory = allDirectory,
                                };
                Console.WriteLine("Восстанавливаем файлы из бекапа");
                maker.Restore();
            }
            else if (action == 2)
            {
                ShowHelp(p);
                return;
            }
            else if (action == 3)
            {
                ShowSettings();
                return;
            }
        }

        private static void MakerProgress(object sender, MessageEventArgs e)
        {
            Console.WriteLine(e.Message);
        }

        private static void ShowSettings()
        {
            var di = new DirectoryInfo(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),
                                               CopyrightMaker.ApplicationDirName));
            Console.WriteLine("Список настроек: ");
            foreach (var directoryInfo in di.EnumerateDirectories())
            {
                Console.WriteLine("{0}", directoryInfo.Name);
            }
        }

        static void ShowHelp(OptionSet p)
        {
            Console.WriteLine("Использование программы:");
            Console.WriteLine("Помечает список фотографий меткой-копирайтом, используя заданные настройки");
            Console.WriteLine();
            Console.WriteLine("Доступные опции:");
            p.WriteOptionDescriptions(Console.Out);
            Console.WriteLine();
            Console.WriteLine("Пример использования:");
            Console.WriteLine("photomark -m -d -b --setting wonderful ");
            Console.WriteLine("пометить все файлы в директории, используя настройки wonderful и создав бекап");

        }
    }
}
